#ifndef _DevicesPID_H_
#define _DevicesPID_H_


#define PID_P       0.08f       //P系数
#define PID_I       0.001f      //I系数
#define PID_D       0.000f      //D系数

#define PID_EMAX    15.0f       //误差积分上限

/* 积分的上下限 */
#define PID_IMAX    PID_OMAX    //积分累积上限
#define PID_IMIN    0.0f        //积分累积下限

/* 输出的上下限 */
#define PID_OMAX    0.4f        //最终 输出上限
#define PID_OMIN    0.0f        //最终 输出下限





typedef struct{
    float kp, ki, kd;       //比例、积分、微分系数
    float integral;         //积分值
    float err;              //偏差值
    float errLast0;         //上一个偏差值

    float errMax;           //最大偏差限制值
    float integralMax;      //最大积分限制值
    float integralMin;      //最大负积分限制值

    float exportValue;      //输出值
    float exportValueMax;   //最大输出值
    float exportValueMin;   //最小输出值
}PIDInfoType;



void vPIDDeInit(PIDInfoType *ptypeHandle, float fkp, float fki, float fkd, float fErrorMax, float fIntegralMax, float fIntegralMin, float fExportValueMax, float fExportValueMin);
float fPIDLocation(PIDInfoType *pData, float fSetValue, float fActualValue);


#endif
